; 这里做了一些改动，如果被包含在loader中，是不需要FAT12的header的，只需要定义几个常量就可以了
%ifdef _IN_BOOT_
	db 'ZLEARN00' ; OEM String, 必须8字节

	BPB_BytsPerSec DW 200h ; 每扇区字节数，用不到变量名的，就不定义名字了，下同
	DB 1 ; 每簇多少扇区
	DW 1 ; Boot 记录占用多少扇区
	BPB_NumFATs DB 2 ; 共用多少FAT表
	BPB_RootEntCnt DW 224 ; 根目录文件数最大值
	DW 2880 ; 逻辑扇区总数
	DB 0xF0 ; 媒体描述符
	DW 9 ; 每FAT扇区数
	BPB_SecPerTrk DW 18 ; 每磁道扇区数
	DW 2 ; 磁头数
	DD 0 ; 隐藏扇区数
	DD 0 ; 32位扇区数
	BS_DrvNum DB 0 ; 中断13的驱动器号
	DB 0 ; 保留字节，未使用
	DB 29h ; 扩展引导标记
	DD 0 ; 卷序列号
	DB 'ZGY_LEARN_L' ; 卷标，必须11个字节
	DB 'FAT12   ' ; 文件系统类型，必须8字节
%else
BPB_BytsPerSec equ 200h ; 每扇区字节数，用不到变量名的，就不定义名字了，下同
BPB_NumFATs equ 2  ; 共用多少FAT表
BPB_RootEntCnt equ 224 ; 根目录文件数最大值
BPB_SecPerTrk equ 18 ; 每磁道扇区数
BS_DrvNum equ 0 ; 中断13的驱动器号
%endif

; FAT12的常量定义
FATSz equ 9
; 根目录占用扇区数
; RootDirSectors = ((BPB_RootEntCnt*32)+(BPB_BytsPerSec–1))/BPB_BytsPerSec
RootDirSectors equ 14
; Root Directory的第一个扇区号 = BPB_RsvdSecCnt + （BPB_NumFATs * FATSz）
SectorNoOfRootDirectory equ 19

; FAT1的第一个扇区号
SectorNoOfFAT1 equ 1

; DeltaSectorNo = BPB_RsvdSecCnt + (BPB_NumFATs * FATSz) - 2
; 文件的开始Sector号 = DirEntry中的开始Sector号 + 根目录占用Sector数目
;                      + DeltaSectorNo
; 当我们要计算簇号X在哪个扇区时，通过X + RootDirSectors + DeltaSectorNo即可获得
DeltaSectorNo equ 17

SectorNoOfRootDirectoryEnd equ SectorNoOfRootDirectory + RootDirSectors